import java.util.HashMap;

/**
 * @Version v1.0
 * @Description: TODO
 * @Author ZHANZHONGXIN
 * @Date 2022/5/6 9:24
 * @Copyright 博为峰
 */
public class Demo01 {
    public static void main(String[] args) {
        //位运算符: & | ^ ~(取反) <<(左移)  >>(右移) >>>(无符号右移)
        System.out.println(6 & 3);
        /*
           00000000-00000000-00000000-00000110
           00000000-00000000-00000000-00000011  &
          -------------------------------------------
           00000000-00000000-00000000-00000010
         */
        System.out.println(6 ^ 3 ^ 3); //异或同一个数两次还是原来的数
        /*
           00000000-00000000-00000000-00000110  6
           00000000-00000000-00000000-00000011  3 ^
          -------------------------------------------
           00000000-00000000-00000000-00000101  5
           00000000-00000000-00000000-00000011  3 ^
          -------------------------------------------
           00000000-00000000-00000000-00000110
         */

        System.out.println(~6);//-7  ~正数二进制+1=负数二进制
        //                            ~6      +1=-6
        /*
          负数的二进制:
          1.正数的二进制
          2.取反
          3.加1

          00000000-00000000-00000000-00000110  6
         -------------------------------------------取反
          11111111-11111111-11111111-11111001
          00000000-00000000-00000000-00000001  1 +
         -------------------------------------------
          11111111-11111111-11111111-11111010  -6的二进制
        */

        System.out.println(6 << 2); //左移几位就是该数乘以2的几次方 6 * 2^2 = 24
        /*
           |00000000-00000000-00000000-00000110|
         |00000000-00000000-00000000-00000110|
         */

        System.out.println(6 >> 2);//右移几位就是该数除以2的几次方 6 / 2^2 = 1, 对于高位出现的空位，高位原来是什么数据就用此数据补空位
        /*
           |00000000-00000000-00000000-00000110|
             |00000000-00000000-00000000-00000110|
         */

        System.out.println(6 >>> 2);//右移几位就是该数除以2的几次方 6 / 2^2 = 1, 对于高位出现的空位，都用0补空位

    }
}
